再一次,javascript设计模式与开发实践-模板模式

简述

一种典型的通过封装变化来提高可扩展性的模式。

模板模式由两个部分组成,一个抽象父类,一个具体子类,通常父类中封装了子类可用的公共实现,子类通过继承父类,也就继承了整个父类的实现,那么模板模式可以重写方法,或者直接重写父类方法。

使用场景

  • 过程类似,方式一致的

案例

咖啡和茶是一个典型的,泡咖啡和泡茶都是一样的方式,只是过程不同。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
var Beverage = function(param) {
var boilWater = function() {
console.log('把水煮沸');
};

var brew = param.brew || function() {
throw new Error('必须传递此方法');
};

var pourInCup = param.pourInCup || function() {
throw new Error('必须传递此方法');
};

var addCondiments = param.addCondiments || function() {
throw new Error('必须传递此方法');
};

var F = function() {};

F.prototype.init = function() {
boilWater();
brew();
pourInCup();
addCondiments();
};

return F;
};


var Coffee = Beverage({
brew: function() {
console.log('冲泡咖啡');
},
pourInCup: function() {
console.log('倒进杯子');
},
addCondiments: function() {
console.log('加糖和咖啡');
}
});

var Tea = Beverage({
brew: function() {
console.log('冲泡茶叶');
},
pourInCup: function() {
console.log('倒进杯子');
},
addCondiments: function() {
console.log('加🍋');
}
});

var coffee = new Coffee();
coffee.init();

var tea = new Tea();
tea.init();